home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d12
/
v8n22.arc
/
SETJMP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-11-28
|
1KB
|
43 lines
SETJUMP.PAS
{* Copyright (c) TurboPower Software 1987. *}
TYPE
JumpRecord =
RECORD
SpReg, BpReg : Word;
JmpPt : Pointer;
END;
PROCEDURE SetJump(VAR JumpDest : JumpRecord);
{-Save current SP, BP, and a jump destination}
INLINE(
$5F/ {pop di ;di = Ofs(JmpDest)}
$07/ {pop es ;es = Seg(JmpDest)}
$26/$89/$25/ {mov es:[di],sp ;save sp}
$26/$89/$6D/$02/ {mov es:[di+2],bp ;save bp}
$E8/$00/$00/ {call null ;push IP onto stack}
{null:}
$58/ {pop ax ;pop into ax}
$05/$0C/$00/ {add ax,12 ;point to "next:"}
$26/$89/$45/$04/ {mov es:[di+4],ax ;save jump offset}
$26/$8C/$4D/$06); {mov es:[di+6],cs ;save jump segment}
{next:}
PROCEDURE LongJump(VAR JumpDest : JumpRecord);
{-Restore SP, BP, and jump to JumpDest.JmpPt}
INLINE(
$5F/ {pop di ;di = Ofs(JumpDest)}
$07/ {pop es ;es = Seg(JumpDest)}
$26/$8B/$25/ {mov sp,es:[di] ;restore sp}
$26/$8B/$6D/$02/ {mov bp,es:[di+2] ;restore bp}
$26/$FF/$6D/$04); {jmp far es:[di+4] ;jump far to JumpDest.JmpPt}